package com.ddpt.permission.util;//package com.lh.center.permission.util;
//
//import cn.hutool.core.collection.CollUtil;
//import org.apache.commons.lang3.StringUtils;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.beans.factory.annotation.Qualifier;
//import org.springframework.data.redis.connection.DataType;
//import org.springframework.data.redis.core.RedisTemplate;
//import org.springframework.data.redis.support.atomic.RedisAtomicLong;
//import org.springframework.util.CollectionUtils;
//
//import java.time.Duration;
//import java.util.*;
//import java.util.concurrent.TimeUnit;
//
//public class RedisUtil {
//
//    @Autowired
//    @Qualifier("commonRedisTemplate")
//    private RedisTemplate<String,Object> redisTemplate;
//
//    //判断key存在
//    public boolean keyIsExists(String key) {
//        return redisTemplate.hasKey(key);
//    }
//
//    /**
//     * 写缓存
//     * @param key
//     * @param value
//     */
//    public void set(String key,Object value) {
//        redisTemplate.opsForValue().set(key,value);
//    }
//
//    public void set(String key,Object value, Duration timeout) {
//        redisTemplate.opsForValue().set(key,value,timeout);
//    }
//    /**
//     * 写缓存并设置过期时间，单位：秒
//     * @param key
//     * @param value
//     * @param seconds 过期时间，单位：秒
//     */
//    public void setExpireSeconds(String key,Object value,int seconds) {
//        redisTemplate.opsForValue().set(key,value,seconds, TimeUnit.SECONDS);
//    }
//
//    /**
//     * 写缓存 自定义时间格式
//     * @param key
//     * @param value
//     * @param timeout
//     * @param unit
//     */
//    public void set(String key, Object value, long timeout, TimeUnit unit){
//        redisTemplate.opsForValue().set(key, value, timeout, unit);
//    }
//
//    /**
//     * 读缓存,若key为null或空串则返回null
//     * @param key
//     * @param <T>
//     * @return
//     */
//    public <T> T get(String key) {
//        if(StringUtils.isBlank(key)) {
//            return null;
//        }
//        Object object = redisTemplate.opsForValue().get(key);
//        if(null == object) {
//            return null;
//        }
//        return (T) object;
//    }
//
//    public Set<String> keys(String key) {
//        return redisTemplate.keys("*" + key + "*");
//    }
//
//    public DataType getDataType(String key) {
//        return redisTemplate.type(key);
//    }
//
//    /**
//     * 为指定key设置失效时间
//     * @param key 键
//     * @param time 时间(秒)
//     * @return
//     */
//    public void expire(String key, long time) {
//        if (time > 0) {
//            redisTemplate.expire(key, time, TimeUnit.SECONDS);
//        }
//    }
//
//    public void expire(String key, long time, TimeUnit unit) {
//        if (time > 0) {
//            redisTemplate.expire(key, time, unit);
//        }
//    }
//
//    /**
//     * 获取指定key的过期时间，key为空时返回-1
//     * @param key 键
//     * @return 时间(秒) 返回0代表为永久有效
//     */
//    public long getExpire(String key) {
//        if(StringUtils.isBlank(key)) {
//            return -1;
//        }
//        return redisTemplate.getExpire(key, TimeUnit.SECONDS);
//    }
//
//    /**
//     * 判断key是否存在
//     * @param key 键
//     * @return
//     */
//    public boolean hasKey(String key) {
//        try {
//            return redisTemplate.hasKey(key);
//        } catch (Exception e) {
//            e.printStackTrace();
//            return false;
//        }
//    }
//
//    /**
//     * 删除缓存
//     * @param key 可以传一个值 或多个
//     */
//    public void del(String... key) {
//        if (key != null && key.length > 0) {
//            if (key.length == 1) {
//                redisTemplate.delete(key[0]);
//            } else {
//                redisTemplate.delete(CollectionUtils.arrayToList(key));
//            }
//        }
//    }
//
//    public void addSetMember(String setKey,Object... values) {
//        if(null == values || values.length == 0) {
//            return;
//        }
//        redisTemplate.opsForSet().add(setKey,values);
//    }
//
//    public <T> Set<T> getAllSetMember(String setKey) {
//        Set<Object> members = redisTemplate.opsForSet().members(setKey);
//        if(CollUtil.isEmpty(members)) {
//            return new HashSet<>();
//        }
//        return (Set<T>) members;
//    }
//
//    public <T> List<T> popMembers(String setKey,long count) {
//        List<Object> list = redisTemplate.opsForSet().pop(setKey, count);
//        if(CollUtil.isEmpty(list)) {
//            return new ArrayList<>();
//        }
//        return (List<T>)list;
//    }
//
//    public boolean isSetMember(String setKey,Object value) {
//        return redisTemplate.opsForSet().isMember(setKey,value);
//    }
//
//    public Long getSetSize(String setKey) {
//        return redisTemplate.opsForSet().size(setKey);
//    }
//
//    /**
//     * 递增
//     * @param key 键
//     * @param delta 要增加几(大于0)
//     * @return
//     */
//    public long incr(String key, long delta){
//        if(delta < 0){
//            throw new RuntimeException("递增因子必须大于0");
//        }
//        return redisTemplate.opsForValue().increment(key, delta);
//    }
//
//    /**
//     * 递减
//     * @param key 键
//     * @param delta 要减少几(小于0)
//     * @return
//     */
//    public long decr(String key, long delta){
//        if(delta<0){
//            throw new RuntimeException("递减因子必须大于0");
//        }
//        return redisTemplate.opsForValue().decrement(key, delta);
//    }
//
//    /**
//     * HashGet
//     * @param key 键 不能为null
//     * @param property 属性名 不能为null
//     * @return 值
//     */
//    public <T> T hget(String key,String property){
//
//        Object value = redisTemplate.opsForHash().get(key, property);
//        if(null == value) {
//            return null;
//        }
//        return (T) value;
//    }
//
//    /**
//     * 获取hashKey对应的所有键值
//     * @param key 键
//     * @return 对应的多个键值
//     */
//    public Map<Object,Object> hget(String key){
//        return redisTemplate.opsForHash().entries(key);
//    }
//
//    /**
//     * 写hash
//     * @param key 键
//     * @param map 对应多个键值
//     */
//    public <K,V> void hset(String key, Map<K,V> map){
//        redisTemplate.opsForHash().putAll(key, map);
//    }
//
//    /**
//     * 写hash并设置时间
//     * @param key 键
//     * @param map 对应多个键值
//     * @param time 时间(秒)
//     */
//    public <K,V> void hset(String key, Map<K,V> map, long time){
//        redisTemplate.opsForHash().putAll(key, map);
//        if(time > 0){
//            expire(key, time);
//        }
//    }
//
//    /**
//     * 指定hash表设置属性,如果不存在将创建
//     * @param key
//     * @param property
//     * @param value
//     */
//    public <K,V> void hset(String key,K property,V value) {
//        redisTemplate.opsForHash().put(key, property, value);
//    }
//
//    /**
//     * 向一张hash表中放入数据,如果不存在将创建
//     * @param key 键
//     * @param item 项
//     * @param value 值
//     * @param time 时间(秒)  注意:如果已存在的hash表有时间,这里将会替换原有的时间
//     * @return true 成功 false失败
//     */
//    public boolean hset(String key,String item,Object value,long time) {
//        try {
//            redisTemplate.opsForHash().put(key, item, value);
//            if(time>0){
//                expire(key, time);
//            }
//            return true;
//        } catch (Exception e) {
//            e.printStackTrace();
//            return false;
//        }
//    }
//
//    public boolean hset(String key,String item,Object value,long time, TimeUnit timeUnit) {
//        try {
//            redisTemplate.opsForHash().put(key, item, value);
//            if(time>0){
//                expire(key, time, timeUnit);
//            }
//            return true;
//        } catch (Exception e) {
//            e.printStackTrace();
//            return false;
//        }
//    }
//
//    /**
//     * 获取自增id
//     * @param key
//     * @return
//     */
//    public Long getIncrementNum(String key) {
//        // 不存在准备创建 键值对
//        RedisAtomicLong entityIdCounter = new RedisAtomicLong(key, redisTemplate.getConnectionFactory());
//        return entityIdCounter.incrementAndGet();
//    }
//
//    /**
//     * 生成5位数code
//     * @param key
//     * @return
//     */
//    public String nextCode(String key) {
//        return String.format("%05d", getIncrementNum(key));
//    }
//
//    public Long getIncrementNumExpire(String key, Long timeout, TimeUnit timeUnit){
//        // 不存在准备创建 键值对
//        RedisAtomicLong entityIdCounter = new RedisAtomicLong(key, redisTemplate.getConnectionFactory());
//        Long counter = entityIdCounter.incrementAndGet();
//        if ((null == counter || counter.longValue() == 1)) {// 初始设置过期时间
//            entityIdCounter.expire(timeout, timeUnit);
//        }
//        return counter;
//    }
//
//    public String nextClientIdSuffix(String key) {
//        return String.format("%05d", getIncrementNumExpire(key, 1L, TimeUnit.HOURS));
//    }
//
//    public Long getExpire(String key, TimeUnit timeUnit){
//        return redisTemplate.getExpire(key, timeUnit);
//    }
//}
